// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "content/renderer/web_frame_utils.h"

#include "content/renderer/render_frame_impl.h"
#include "content/renderer/render_frame_proxy.h"
#include "ipc/ipc_message.h"
#include "third_party/WebKit/public/web/WebFrame.h"
#include "third_party/WebKit/public/web/WebLocalFrame.h"
#include "third_party/WebKit/public/web/WebRemoteFrame.h"

namespace content {

int GetRoutingIdForFrameOrProxy(blink::WebFrame* web_frame)
{
    if (!web_frame)
        return MSG_ROUTING_NONE;
    if (web_frame->isWebRemoteFrame())
        return RenderFrameProxy::FromWebFrame(web_frame)->routing_id();
    return RenderFrameImpl::FromWebFrame(web_frame)->GetRoutingID();
}

blink::WebFrame* GetWebFrameFromRoutingIdForFrameOrProxy(int routing_id)
{
    auto* render_frame = RenderFrameImpl::FromRoutingID(routing_id);
    if (render_frame)
        return render_frame->GetWebFrame();

    auto* render_frame_proxy = RenderFrameProxy::FromRoutingID(routing_id);
    if (render_frame_proxy)
        return render_frame_proxy->web_frame();

    return nullptr;
}

} // namespace content
